Análisis de Presión, PM2.5 y Precipitación de estación Compartir#
Importación de Librerías
# Load libraries
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Load sklearn
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import ElasticNet
from sklearn.tree import DecisionTreeRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import SVR
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn.metrics import mean_squared_error
import warnings
warnings.filterwarnings("ignore")
A continuación usamos la función read_cvs() de la libreria pandaspara cargar los datos a nuestro entorno de trabajo.
df = pd.read_csv("data_2017_2022.csv", sep=";")
df_1 = df.copy()
df_1["medicion"]=df_1["medicion"].str.replace(",", ".").astype("float") # convertir variable medición a númerica
df_1['fecha'] = pd.to_datetime(df_1['fecha']) # convertir variable fecha a datatime
df_1 = df_1.pivot(index=["fecha", "estacion"],columns= "variable", values="medicion").reset_index()
Para más practicidad se renombran las variables de nuestro conjunto de datos.
df_1 = df_1.rename(columns={
'variable': 'var',
'black_carbon': 'BC',
'direccion_viento': 'WD',
'humedad': 'HR',
'lluvia': 'RF',
'presion': 'P',
'radiacion_solar': 'RS',
'temperatura': 'AT',
'temperatura_10_m': 'AT_10_m',
'uv-pm': 'UV',
'velocidad_viento': 'WS',
'h2s': 'H2S',
'no2': 'NO2',
'o3': 'O3',
'so2': 'SO2',
'pm10': 'PM10',
'pm25': 'PM2.5'
})
Dado que la variable la variable \(\text{NO}_2\) tiene solo \(1\) medición entre \(473.256\) registros durante el periodo analizado, lo que representa casi un \(100\%\) de datos faltantes, hemos optado por excluirla del análisis.
df_t = df_1.copy()
df_t = df_t.drop(columns=["NO2"])
df_compartir = df_t[df_t['estacion'] == 'compartir']
df_base_aerea = df_t[df_t['estacion'] == 'base_aerea']
df_canaveralejo = df_t[df_t['estacion'] == 'canaveralejo']
df_era_obrero = df_t[df_t['estacion'] == 'era_obrero']
df_ermita = df_t[df_t['estacion'] == 'ermita']
df_flora = df_t[df_t['estacion'] == 'flora']
df_pance = df_t[df_t['estacion'] == 'pance']
df_transitoria = df_t[df_t['estacion'] == 'transitoria']
df_univalle = df_t[df_t['estacion'] == 'univalle']
Presión Atmosférica (P) #
import plotly.graph_objects as go
import pandas as pd
fig = go.Figure()
fig.add_trace(go.Scatter(
x=df_compartir['fecha'],
y=df_compartir['P'],
mode='lines', # Mostrar la línea
line=dict(color='#30143F', width=2), # Cambiar el color de la línea y el ancho
name='Presión Atmosférica (hPa)',
opacity=0.7 # Ajustar la opacidad de la línea (0.0 es completamente transparente, 1.0 es completamente opaco)
))
fig.update_layout(
title='Presión Atmosférica a lo Largo del Tiempo',
xaxis_title='Fecha',
yaxis_title='Presión Atmosférica (hPa)',
xaxis=dict(tickangle=45, tickformat='%Y-%m-%d'),
yaxis=dict(tickformat='.1f'), # Formato de los ticks del eje Y (un decimal)
template='plotly_white', # Fondo blanco
title_x=0.5, # Centrar el título
title_font=dict(size=16) # Ajustar el tamaño de la fuente del título
)
fig.show()
import plotly.graph_objects as go
# Crear una nueva columna para identificar la fuente de los datos
df_compartir['source'] = 'Compartir'
df_ermita['source'] = 'Ermita'
df_era_obrero['source'] = 'Era Obrero'
df_canaveralejo['source'] = 'Canaveralejo'
df_base_aerea['source'] = 'Base Aerea'
df_pance['source'] = 'Pance'
df_flora['source'] = 'Flora'
df_transitoria['source'] = 'Transitoria'
df_univalle['source'] = 'UniValle'
# Combinar todos los DataFrames en uno solo
df_combined = pd.concat([df_compartir, df_ermita, df_era_obrero, df_canaveralejo, df_base_aerea, df_pance, df_flora, df_transitoria, df_univalle])
fig = go.Figure()
# Obtener la lista única de estaciones
estaciones = df_combined['source'].unique()
# Añadir una traza de línea para cada estación
for estacion in estaciones:
df_subset = df_combined[df_combined['source'] == estacion]
fig.add_trace(go.Scatter(
x=df_subset['fecha'],
y=df_subset['P'],
mode='lines',
name=estacion, # Nombre de la estación para la leyenda
line=dict(width=2), # Ajustar el ancho de la línea si es necesario
opacity=0.7 # Ajustar la opacidad de la línea
))
# Ajustar el diseño del gráfico
fig.update_layout(
title='Presión Atmosférica a lo Largo del Tiempo por Estación',
xaxis_title='Fecha',
yaxis_title='Presión Atmosférica (hPa)',
xaxis=dict(tickangle=45, tickformat='%Y-%m-%d'),
yaxis=dict(tickformat='.1f'), # Formato de los ticks del eje Y (un decimal)
template='plotly_white', # Fondo blanco
title_x=0.5, # Centrar el título
title_font=dict(size=16) # Ajustar el tamaño de la fuente del título
)
fig.show()